package simplezap

import (
	"fmt"
	"io"
	"strings"
)

// Field 表示一对结构化字段，模仿 zap.Field 的口味。
type Field struct {
	Key   string
	Value any
}

// Logger 第二版：保留基础写日志能力，新增结构化字段的拼接。
type Logger struct {
	writer io.Writer
}

func New(w io.Writer) *Logger {
	return &Logger{writer: w}
}

// Info 现在可以接受任意数量的字段，一起写入日志。
func (l *Logger) Info(message string, fields ...Field) error {
	return l.write("INFO", message, fields)
}

func (l *Logger) write(level, message string, fields []Field) error {
	if l == nil {
		return fmt.Errorf("logger is nil")
	}
	if l.writer == nil {
		return fmt.Errorf("writer is nil")
	}

	payload := message
	if len(fields) > 0 {
		payload = fmt.Sprintf("%s | %s", message, formatFields(fields))
	}

	if _, err := fmt.Fprintf(l.writer, "[%s] %s\n", level, payload); err != nil {
		return fmt.Errorf("write log: %w", err)
	}
	return nil
}

func formatFields(fields []Field) string {
	parts := make([]string, 0, len(fields))
	for _, f := range fields {
		parts = append(parts, fmt.Sprintf("%s=%v", f.Key, f.Value))
	}
	return strings.Join(parts, ", ")
}
